Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.04.2017, 14:48
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Прервать и продолжить синхронный запрос
Доброго дня. Есть две кнопки $('#start') и $('#stop')/
По кнопке start запускается цикл с синхронным запросом:

for (var key in ar) {
...
var xhr = new XMLHttpRequest();
xhr.open('GET', ....);
xhr.send();
...
$('#stop').click(function(){
        alert('Остановлено');
        xhr.abort();
       }); 
...
if (xhr.status != 200) {...}
else {...}
}


Подскажите пожалуйста: как сделать, чтобы по нажатию на кнопку stop запросы больше не отправлялись
а по кнопке start снова возобновлялись

в данном примере пытался остановить по кнопке stop, но она не нажимается вообще, до тех пор все запросы не выполнятся.
Ответить с цитированием
  #2 (permalink)  
Старый 18.04.2017, 16:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Сообщение от kupidon
как сделать, чтобы по нажатию на кнопку stop запросы больше не отправлялись
а по кнопке start снова возобновлялись
Для начала убрать цикл. Переделать все на setTimeout()... А там добавить условие с проверкой некоего "флага" делать что-то дальше или нет.
По нажатию на старт - опять запускать setTimeout().
Ответить с цитированием
  #3 (permalink)  
Старый 18.04.2017, 16:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

kupidon, или вообще используй setInterval()...

Стоп будет его "убивать", а старт опять запускать.
Ответить с цитированием
  #4 (permalink)  
Старый 19.04.2017, 08:01
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Не понимаю как избавиться от цикла? мне ведь надо обработать массив, чтобы взять оттуда данные для отправки на сервер.
И в каждой отправке передавать новые данные

выделяю отправку запроса в отдельную функцию
function zapros(А,Б){
var xhr = new XMLHttpRequest();
xhr.open('GET', ....);
xhr.send();
}


перебираю массив циклом:
for (var key in ar) { 
получаю массив значений A и массив Б для отправки на сервер
}


var i=0;
setInterval(zapros (A[i++], B[i++]), 1000);


здесь ведь тоже надо как-то цикл сделать , чтобы постоянно отправлять новые значения
И не понимаю как здесь сделать clearinterval ?

Сильно не ругайтесь, я только учусь
Ответить с цитированием
  #5 (permalink)  
Старый 19.04.2017, 08:57
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

Специально набросал пример, для общего понимания. Есть поле с результатами, есть две кнопки старт и стоп. Пример рабочий, но кнопка стоп не останавливает работу. Как остановить? И как продолжить с того же места?

<select multiple="" id="answer_sel"></select>       
<input type="button" id="start" value="Старт">
<input type="button" id="stop" value="Стоп" disabled>

<script>
    var startButton = document.getElementById("start");
    var stopButton = document.getElementById("stop");

 stopButton.onclick = function() {
      startButton.disabled = false;
      stopButton.disabled = true;
      clearInterval(timerId);
    }

startButton.onclick = function() {
      startButton.disabled = true;
      stopButton.disabled = false;
      var i=0
      var timerId = setInterval(function() {
		i++;	
  		$("#answer_sel").append("<option selected=\"\">Загружено: "+i+"</option>");
  	  }, 1000);
        }
</script>

Последний раз редактировалось kupidon, 19.04.2017 в 09:07.
Ответить с цитированием
  #6 (permalink)  
Старый 19.04.2017, 09:12
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Сообщение от kupidon
Не понимаю как избавиться от цикла? мне ведь надо обработать массив, чтобы взять оттуда данные для отправки на сервер.
Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
var arr=[0,1,2,3,4,5];
var tmo=1000;
function test(){
	document.writeln(arr[test.item]);
	if (++test.item<arr.length) {
		setTimeout(test,tmo);
	};
};
test.item=0;
setTimeout(test,tmo);
</script>
</head>
<body>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 19.04.2017, 09:20
Аватар для kupidon
Аспирант
Отправить личное сообщение для kupidon Посмотреть профиль Найти все сообщения от kupidon
 
Регистрация: 18.03.2016
Сообщений: 69

спасибо Вам за помощь. Подскажите пожалуйста еще на последнее мое сообщение ответ (не знаю как сделать сообщение с кнопкой ЗАПУСТИТЬ, поэтому сделал так)
И я начну упорядочивать все мысли и идеи...
Ответить с цитированием
  #8 (permalink)  
Старый 19.04.2017, 09:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,277

Сообщение от kupidon
не знаю как сделать сообщение с кнопкой ЗАПУСТИТЬ
http://javascript.ru/formatting

Сообщение от kupidon
Подскажите пожалуйста еще на последнее мое сообщение ответ
Он достаточно легко делается из моего примера.
Для удобства нужно сделать таймаут побольше... Завести какой-то "флаг", который будет меняться при нажатии кнопки стоп... Усилить условие запуска setTimeout() внутри функции test() на анализ того "флага"...
И на кнопку старт сделать смену "флага" в исходное положение и запустить setTimeout().

Вот собственно и все...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не отправляется 2й запрос после 1го. (XMLHttpRequest) Артист AJAX и COMET 6 05.10.2016 00:37
Синхронный запрос возвращает NULL, почему? WoWa AJAX и COMET 16 24.03.2015 08:52
Прервать синхронный запрос. livelover Общие вопросы Javascript 12 19.09.2014 23:06
Синхронный запрос geniyz jQuery 5 08.05.2009 03:30
Синхронный запрос данных по AJAX Shasoft AJAX и COMET 2 03.03.2009 14:07